package 旧版作用域相关;

import java.util.LinkedHashMap;
import java.util.Map;

public abstract class 基础作用域 implements 作用域 {
    private final 作用域 父作用域;
    private final Map<String, 符号> symbols = new LinkedHashMap<>();

    public 基础作用域(作用域 父作用域) {
        this.父作用域 = 父作用域;
    }

    public 符号 解析(String 名称) {
        var 符号 = symbols.get(名称);
        if (符号 != null) return 符号;

        if (父作用域 != null) return 父作用域.解析(名称);
        return null;
    }

    public void 定义(符号 符号) {
        symbols.put(符号.取名称(), 符号);
        符号.作用域 = this;
    }

    public 作用域 取父作用域() {
        return 父作用域;
    }

    public String toString() {
        return symbols.keySet().toString();
    }
}
